# -*- coding: utf-8 -*-
##py2exe
#from Bauteilkiste.Modules import Datenbank
##normal
from PyQt4 import QtGui, QtCore
#from UIWiderstand import UIWiderstand
from Bauteilkiste.Modules import Datenbank
from Bauteilkiste.UIClasses import UIDioden, UIWiderstand
from Bauteilkiste.UIClasses.UIKondensatoren import UIKondensatoren
from Bauteilkiste.UIClasses.UITaktgeneratoren import UITaktgeneratoren
from Bauteilkiste.UIClasses.UITransistoren import UITransistoren
from Bauteilkiste.UIClasses.UIIC import UIIC
#===============================================================================
# Class: UILagertabelle
# 
# Generische Tabelle zur Visualiserung des aktuellen Lagerbestandes
# Spalten werden dynamisch generiert
# Die erste Spalte ist immer versteckt (reserviert fuer UID)
#
# Konstruktor erwartet:
# headerLabel    (zwingend)    Liste mit den Spaltennamen
# alignRight                   Liste mit den Spalten die Rechtsausrichtung haben
# alignLeft                    Liste mit den Spalten die Linksausrichtung haben
# dataList                     2dimensionales Array mit einzufuegenen Daten
# parent
#
# Weitere Funktionen
# 
# Name            Attribute    Funktion
# addItemList     dataList     fuegt mehrere Datensaetze ein
# appendItem      data         fuegt einen weiteren Datensatz ein
#===============================================================================

################################
##Nur um numerisch zu sortieren#
################################

class QTableWidgetItemNumber(QtGui.QTableWidgetItem):
    def __init__(self, data):
        QtGui.QTableWidgetItem.__init__(self, str(data))

    

    def __lt__(self, other):
        try:
            ich = float(self.text())
            der = float(other.text())
        except ValueError:
            ich = self.text()
            der = other.text()
        return ich < der

    def __le__(self, other):
        try:
            ich = float(self.text())
            der = float(other.text())
        except ValueError:
            ich = self.text()
            der = other.text()
        return ich <= der


class UILagertabelle(QtGui.QWidget):
    alignLeft = None
    alignRight = None
    tableName = None
    
    def __init__(self, tableName, headerLabel, alignRight = None, alignLeft = None, dataList = None, parent=None):
        QtGui.QWidget.__init__(self, parent)
        
        self.tableName = tableName
        self.alignLeft = alignLeft
        self.alignRight = alignRight
        self.headerLabel = headerLabel
          
        self.table = QtGui.QTableWidget()

        self.table.setColumnCount(len(headerLabel))
        self.table.setHorizontalHeaderLabels(headerLabel)
        self.table.setAlternatingRowColors(True)
        self.table.setColumnHidden(0, True)
        self.table.horizontalHeader().setResizeMode(QtGui.QHeaderView.Interactive)
        self.table.verticalHeader().hide()
        self.table.setSelectionBehavior(1)
        self.table.setSortingEnabled(True)
        self.table.itemDoubleClicked.connect(self.bearbeiteEintrag)
        
        
        if dataList != None:
            self.addItemList(dataList)
        
        self.toolbar = QtGui.QToolBar()
        
        self.add = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_FileDialogNewFolder), 'Neuer Eintrag', self) #QStyle.SP_FileDialogNewFolder
        self.add.triggered.connect(self.neuerEintrag)
        self.reload = QtGui.QAction(self.style().standardIcon(QtGui.QStyle.SP_DialogResetButton), 'Reload', self) #SP_DialogResetButton
        self.reload.triggered.connect(self.reloadTable)
        self.delete = QtGui.QAction(self.style().standardIcon(14), 'Reload', self)
        self.delete.triggered.connect(self.deleteItem) 
        
        self.toolbar.addAction(self.add)
        self.toolbar.addAction(self.reload)
        self.toolbar.addAction(self.delete)
        
        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.toolbar)
        vbox.addWidget(self.table)
        
        self.setLayout(vbox)
    
    
    def bearbeiteEintrag(self):
        data = {}
        for i in range(len(self.headerLabel)):
            data[self.headerLabel[i]] = str(self.table.item(self.table.currentRow(), i).text())
        self.neuerEintrag(data)
    
    
    def neuerEintrag(self, data=None):
        if self.tableName == "Widerstände":
            dialog = UIWiderstand.UIWiderstand(self)
        elif self.tableName == "Dioden":
            dialog = UIDioden.UIDioden(self)
        elif self.tableName == "Kondensatoren":
            dialog = UIKondensatoren(self)
        elif self.tableName == "Taktgeneratoren":
            dialog = UITaktgeneratoren(self)
        elif self.tableName == "Transistoren":
            dialog = UITransistoren(self)
        elif self.tableName == "IC":
            dialog = UIIC(self)
        
        try:
            if data != None and data != False:
                try:
                    dialog.insertData(data)
                except:
                    print( "Fehler beim Daten einfügen für "+str(self.tableName))
            dialog.show()
        except:
            print( "Kein passender Eintrag gefunden für "+str(self.tableName))
    
    
    def addItemList(self, dataList):
        for data in dataList:
            if len(data) == self.table.columnCount():
                self.appendItem(data)
            else:
                print (self.table.columnCount())
                print (len(data))
        
    def appendItem(self, data):
        if len(data) != self.table.columnCount():
            return False
        self.table.setRowCount(self.table.rowCount() + 1)
        items = []
        for i in range(len(data)):
            item = QTableWidgetItemNumber(data[i])
            item.setFlags(QtCore.Qt.NoItemFlags | QtCore.Qt.ItemIsSelectable | QtCore.Qt.ItemIsEnabled)
            
            items.append(item)
        if self.alignLeft != None:
            for i in self.alignLeft:
                items[i].setTextAlignment(0x0081) #Vertical centered 0x0080 // Left Align 0x0001
        
        if self.alignRight != None:
            for i in self.alignRight:
                items[i].setTextAlignment(0x0082) #Vertical centered 0x0080 // right Align 0x0002

        for i in range(len(items)):
            self.table.setItem(self.table.rowCount()-1, i, items[i])
    
    def populateTable(self, reloadTable = None):
        db = Datenbank.Datenbank()
        db.loadDB(self.tableName)
        if reloadTable:
            self.table.setSortingEnabled(False)
            self.table.clearContents()
            for i in range(self.table.rowCount()):
                self.table.removeRow(i)
            self.table.setRowCount(0)
        self.addItemList(db.tableValues[self.tableName])
        self.table.setSortingEnabled(True)
        self.table.sortItems(1)
        self.table.sortItems(2)

    def reloadTable(self):
        self.populateTable(True)
        
    def deleteItem(self):
        indexes = self.table.selectedIndexes()
        selected = [-1]
        for i in indexes:
            if i.row() > selected[len(selected)-1]:
                selected.append(i.row())
        selected.remove(-1)
        
        for index in selected:
            dUID = self.table.item(index, 0).text()
            db = Datenbank.Datenbank()
            db.cursor.execute('DELETE FROM "main"."'+str(self.tableName)+'" WHERE UID="'+str(dUID)+'"')
        db.connection.commit()
        self.populateTable(True)
